﻿#ifndef PST_TEXTARRAYMETAHANDER_H
#define PST_TEXTARRAYMETAHANDER_H

// 文本文件的列信息


#include <QString>

#include <vtkInformation.h>
#include <vtkInformationStringKey.h>
#include <vtkInformationIntegerKey.h>

class vtkAbstractArray;

namespace pst
{
    class TextArrayMetaStruct
    {
    public:
        TextArrayMetaStruct() = default;
        TextArrayMetaStruct(const QString& filePath, const QString& fileName,
            int resultParaType, int resultDataType, const QString& dataGroupNam,
            int relatedRealPartIndex, int relatedImagPartIndex, int relatedMagPartIndex,
            int relatedPhasePartIndex, int relatedScalarIndex, const QString& unit, int keyValueType);

    public:
        QString filePath{};                //完整路径
        QString fileName{};

        //结果参数类型 
        //如果是key列：  时间（1） 频率（2） Theta（3） Phi（4） X坐标（5） Y坐标（6）Z坐标（7）
        //如果是value列： 电场-近场（0）电场 - 近场（0）电场 - 近场（0）电场 - 远场（1）
                        // 增益（7）S参数（8）驻波比（9）电压（10）电流（11）人体吸收比（13）
                        //功率（16）方向性系数（17）雷达散射截面（18）反射系数（19）磁场 - 近场（20）
        int resultParaType{ -1 };

        // 0:实部, 1:虚部, 2:幅度, 3:相位 4:标量
        int resultDataType{ -1 };          //结果数据类型 是实部、虚部、幅度、相位，或者是标量

        QString dataGroupName{};               // 组列名
        int relatedRealPartIndex{ -1 };    // 相关实部列下标
        int relatedImagPartIndex{ -1 };    // 相关虚部列下标
        int relatedMagPartIndex{ -1 };     // 相关幅度列下标
        int relatedPhasePartIndex{ -1 };   // 相关相位列下标
        int relatedScalarIndex{ -1 };      // 标量列下标

        QString unit{};                    //单位
        int keyValueType{ -1 };            // 0: key, 1: value
    };

    class TextArrayMetaHander
    {
    public:
        static void setArrayMeta(vtkAbstractArray* array, const TextArrayMetaStruct& meta);
        static bool getArrayMeta(vtkAbstractArray* array, TextArrayMetaStruct& str);


        static QString getFilePathFromArray(vtkAbstractArray* array);
        static QString getFileNameFromArray(vtkAbstractArray* array);

        static int getResultParaTypeFromArray(vtkAbstractArray* array);
        static int getResultDataTypeFromArray(vtkAbstractArray* array);

        static QString getDataGroupNameFromArray(vtkAbstractArray* array);
        static int getRelatedScalarIndexFromArray(vtkAbstractArray* array);
        static int getRelatedRealPartIndexFromArray(vtkAbstractArray* array);
        static int getRelatedImagPartIndexFromArray(vtkAbstractArray* array);
        static int getRelatedMagPartIndexFromArray(vtkAbstractArray* array);
        static int getRelatedPhasePartIndexFromArray(vtkAbstractArray* array);

        static QString getUnitFromArray(vtkAbstractArray* array);
        static int getKeyValueTypeFromArray(vtkAbstractArray* array);


    private:
        static vtkInformationStringKey* FILE_PATH();
        static vtkInformationStringKey* FILE_NAME();

        static vtkInformationIntegerKey* RESULT_PARA_TYPE();
        static vtkInformationIntegerKey* RESULT_DATA_TYPE();

        static vtkInformationStringKey* DATA_GROUP_NAME();
        static vtkInformationIntegerKey* RELATED_SCALAR_INDEX();
        static vtkInformationIntegerKey* RELATED_REALPART_INDEX();
        static vtkInformationIntegerKey* RELATED_IMAGPART_INDEX();
        static vtkInformationIntegerKey* RELATED_MAGPART_INDEX();
        static vtkInformationIntegerKey* RELATED_PHASEPART_INDEX();

        static vtkInformationStringKey* UNIT();
        static vtkInformationIntegerKey* KEY_VALUE_TYPE();
    };


}
#endif
